import { login, getSMS } from '@/api'
import { LoginForm, Token } from '@/types/data'
import { LoginAction, RootThunkAction } from '@/types/store'
import { removeToken, setToken } from '@/utils/storage'

// 专门设置token的 action生成器
function saveToken(token: Token): LoginAction {
  // 缓存中保存token
  setToken(token)
  return {
    type: 'login/login',
    payload: token,
  }
}

// 登录的 action生成器
function loginAction(data: LoginForm): RootThunkAction {
  return async (dispatch) => {
    // 调用接口
    const res = await login(data)
    // 更新仓库的数据
    dispatch(saveToken(res.data.data))
  }
}

// 获取短信验证码的 action
function smsAction(mobile: string): RootThunkAction {
  return async (dispatch) => {
    // 调用接口
    const res = await getSMS(mobile)
  }
}

// 木有异步 直接返回 LoginAction的值
function logout(): LoginAction {
  // 删除用户token
  removeToken()
  // reducer中删除token
  return {
    type: 'login/logout',
  }
}

// 结合RootThunkAction 类型使用
function logoutAction(): RootThunkAction {
  // 清空登录凭证
  return (dispatch) => {
    // reducer中删除token
    dispatch(logout())
  }
}

export { loginAction, smsAction, logoutAction, logout, saveToken }
